package com.design03_behavioral.pattern20_memento.example02;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

/**
 * @ClassName 玩家相当于发起人
 *  "当钱消耗到一定程度,就恢复到初始状态"
 * 1. 游戏玩家通过扔骰子来决定下一个状态
 * 2. 当点数为1,玩家金钱增加
 * 3. 当点数为2,玩家金钱减少
 * 4. 当点数为6,玩家会得到水果
 * 5. 当钱消耗到一定程度,就恢复到初始状态
 * @Description TODO
 * @Author 22963
 * @DATE 2023/9/10 13:00
 */
public class Player {

    private int money; //所持金钱
    private List<String> fruits = new ArrayList(); //获得的水果

    private Random random = new Random(); //随机数对象
    private static String[] fruitsName={ //表示水果种类的数组
            "苹果","葡萄","香蕉","橘子"
    };

    //一开始玩家只有钱
    public Player(int money) {
        this.money = money;
    }


    public int getMoney(){
        return money;
    }


    //获取一个水果
    public String getFruit(){
        String prefix ="";
        if(random.nextBoolean()){
            prefix="好吃的";
        }

        //从数组中获取
        String f =fruitsName[random.nextInt(fruitsName.length)];
        return prefix +f;
    }

    //掷骰子游戏
    public void yacht(){
        int dice = random.nextInt(6) + 1; //掷骰子
        if(dice == 1){
            money += 100;
            System.out.println("所持有的金钱增加了..");
        }else if(dice == 2){
            money /= 2;
            System.out.println("所持有的金钱减半..");
        }else if(dice == 6){ //获取水果
            String fruit = getFruit();
            System.out.println("获得了水果: " + fruit);
            fruits.add(fruit);
        }else{
            //骰子结果为3、4、5
            System.out.println("无效数字,继续投掷");
        }
    }

    //拍摄快照
    public Memento createMemento(){
        Memento memento = new Memento(money);
        for (String fruit : fruits) {
            if(fruit.startsWith("好吃的")){
                memento.addFruit(fruit);
            }
        }
        return memento;
    }


    //撤销方法
    public void restore(Memento memento) {
        this.money = memento.money;
        this.fruits = memento.getFruits();
    }

    @Override
    public String toString() {
        return "Player{" +
                "money=" + money +
                ", fruits=" + fruits +
                ", random=" + random +
                '}';
    }
}
